<template>
    <el-container>
        <el-aside width="200px">
            <!-- 使用自定义的组件
            1、在components中创建组件
            2、在当前组件中引入组件 ts import相关vue文件
            3、使用组件
            -->
            <SideMenu></SideMenu>
        </el-aside>
        <el-container>
            <el-header>
                <!-- 标题 -->
                <strong>后台管理系统</strong>

                <div class="header-avatar">
                    <!-- 头像 动态绑定 显示用户头像-->
                    <el-avatar size="small" :src="userInfo.avatar" />
                    <!-- 下拉菜单 -->
                    <el-dropdown trigger="click">
                        <span class="el-dropdown-link">{{ userInfo.username }}<el-icon
                                class="el-icon--right"><arrow-down /></el-icon>
                        </span>
                        <template #dropdown>
                            <el-dropdown-menu>
                                <el-dropdown-item>
                                    <router-link to="/userCenter">
                                        个人中心
                                    </router-link>
                                </el-dropdown-item>

                                <!-- 添加退出事件 在此组件中直接click是不成功的，需要使用.native才能触发该事件-->
                                <el-dropdown-item @click.native="logout">退出</el-dropdown-item>
                            </el-dropdown-menu>
                        </template>
                    </el-dropdown>

                    <!-- 链接 -->
                    <el-link href="" target="_blank">视频讲解</el-link>
                    <el-link href="" target="_blank">网站</el-link>
                </div>
            </el-header>
            <el-main>
                <Tabs></Tabs>
                <!-- 父级路由Home中的子路由Index 通过router-view实现index子路由的显示 -->
                <div style="margin: 0 15px;">
                    <router-view></router-view>
                </div>
            </el-main>
        </el-container>
    </el-container>
</template>

<script setup lang="ts">
// 导入相关要使用的组件
import { getCurrentInstance, ref, onMounted, provide } from 'vue';
import SideMenu from './inc/SideMenu.vue'
import Tabs from './inc/Tabs.vue'
import { useStore } from 'vuex';
import { useRouter } from 'vue-router';
import { Action, ElMessage, ElMessageBox } from 'element-plus';

// 获取axios实例 由于setup中不能使用this，因此需要使用getCurrentInstance 方法获得当前活跃的组件
const { proxy } = (getCurrentInstance() as any);
// 定义用户信息 使用ref响应式包裹
const userInfo = ref({
    id: "",
    username: "",
    avatar: "",
});

// 获取用户信息 在页面初始化的时候获取 vue3直接启用了created生命周期函数 直接是setup代替
function getUserInfo() {
    proxy.$axios.get("/sys/userInfo").then((res: any) => {
        if (res.data.code == 200) {
            // 使用ref包裹的变量需要通过value赋值
            userInfo.value = res.data.data;
        }
    })
}

// 获取全局的store
const store = useStore();
// 获取全局router
const router = useRouter();

// 退出事件
function logout() {
    proxy.$axios.post("/logout").then((res: any) => {
        if (res.data.code == 200) {
            // 删除一些用户信息
            localStorage.clear();
            sessionStorage.clear();
            // 清除store中的一些状态
            store.commit("resetState"); // resetState是store中自定义的mutations方法
            // 退出成功后跳转到登录页面
            ElMessageBox.alert('是否退出？', '退出系统', {
                confirmButtonText: '确定',
                type: 'warning',
                callback: (action: Action) => {
                    if (action === 'confirm') {
                        ElMessage({
                            type: 'success',
                            message: res.data.msg,
                            duration: 1000
                        });
                        // 跳转到登录页面
                        router.push("/login");
                    }
                }
            });
        } else {
            ElMessage.error(res.msg);
        }
    })
}
// 调用函数
onMounted(() => {
    getUserInfo(); // 在组件挂载时调用 getUserInfo
});
</script>

<style scoped>
.el-container {
    margin: 0px;
    padding: 0;
    height: 100vh;
}



/* 头像部分css */
.header-avatar {
    float: right;
    width: 210px;
    display: flex;
    justify-content: space-around;
    align-items: center;
}

/* 下拉框部分css */
.el-dropdown-link {
    /* 下拉框指向后出现小手指图表 */
    cursor: pointer;
    display: flex;
    align-items: center;
}

.el-header {
    background-color: #17B3A3;
    color: #333;
    text-align: center;
    line-height: 60px;
}

/* 菜单栏的css */
.el-aside {
    background-color: #D3DCE6;
    color: #333;
    text-align: center;
    line-height: 200px;
}

/* 中间部分的css */
.el-main {
    color: #333;
    padding: 0;
}

/* 去掉隐约的下划线 */
a {
    text-decoration: none;
}
</style>